#ifndef SERVIDOR_H_
#define SERVIDOR_H_

#include <cstring>
#include <string>
#include <iostream>
#include <vector>
#include "Mensajes.h"
#include "Cola.h"
#include "MemoriaCompartida.h"

#define MAX_SALAS 5
#define MAX_CLIENTES 100

using namespace std;

typedef struct Usuario {
	int idSala;
	bool conectado;
	char apodo[STRING_SIZE];
} Usuario;

typedef struct Usuarios {
	int size;
	int libres;
	Usuario usuario[MAX_CLIENTES];
} Usuarios;

typedef struct Sala {
	int usuariosConectados;
	char nombre[STRING_SIZE];
} Sala;

typedef struct Salas {
	int size;
	int libres;
	Sala sala[MAX_SALAS];
} Salas;

class Servidor {

	private:
		MemoriaCompartida<Salas> salas;
		MemoriaCompartida<Usuarios> usuarios;
		Cola<MensajeSalas>* colaMensajeSalas;
		Cola<MensajeUsuarios>* colaMensajeUsuarios;
		Cola<MensajeNuevoCliente>* colaMensajeNuevoCliente;
		Cola<MensajeConectarASala>* colaMensajeConectarASala;
		Cola<MensajeNuevoMensaje>* colaMensajeNuevoMensaje;

	public:
		Servidor(string archivo,char letra);
		virtual ~Servidor();
		void atenderPeticionListaDeSalas();
		void atenderPeticionListaDeUsuarios();
		void atenderPeticionClienteNuevo();
		void atenderPeticionConectarASala();
		void atenderPeticionMensajeNuevo();
		int usuariosConectados();

};

#endif /* SERVIDOR_H_ */
